<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
  
  
  <link rel="shortcut icon" href="img/favicon.ico">
  <title>入门 - Minetest Modding Books(中文版)</title>
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700" />

  <link rel="stylesheet" href="css/theme.css" />
  <link rel="stylesheet" href="css/theme_extra.css" />
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/github.min.css" />
  
  <script>
    // Current page data
    var mkdocs_page_name = "\u5165\u95e8";
    var mkdocs_page_input_path = "3.\u5165\u95e8.md";
    var mkdocs_page_url = null;
  </script>
  
  <script src="js/jquery-2.1.1.min.js" defer></script>
  <script src="js/modernizr-2.8.3.min.js" defer></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
  <script>hljs.initHighlightingOnLoad();</script> 
</head>

<body class="wy-body-for-nav" role="document">

  <div class="wy-grid-for-nav">

    
    <nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
    <div class="wy-side-scroll">
      <div class="wy-side-nav-search">
        <a href="index.html" class="icon icon-home"> Minetest Modding Books(中文版)</a>
        <div role="search">
  <form id ="rtd-search-form" class="wy-form" action="./search.html" method="get">
      <input type="text" name="q" placeholder="Search docs" title="Type search term here" />
  </form>
</div>
      </div>

      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
                <ul>
                    <li class="toctree-l1"><a class="reference internal" href="index.html">首页</a>
                    </li>
                </ul>
                <ul>
                    <li class="toctree-l1"><a class="reference internal" href="1.%E8%AF%91%E8%80%85%E5%BA%8F.html">译者序</a>
                    </li>
                </ul>
                <ul>
                    <li class="toctree-l1"><a class="reference internal" href="2.%E5%89%8D%E8%A8%80.html">前言</a>
                    </li>
                </ul>
                <ul class="current">
                    <li class="toctree-l1 current"><a class="reference internal current" href="3.%E5%85%A5%E9%97%A8.html">入门</a>
    <ul class="current">
    <li class="toctree-l2"><a class="reference internal" href="#mods">什么是游戏和Mods？</a>
    </li>
    <li class="toctree-l2"><a class="reference internal" href="#_2">模组存储在哪里了呢？</a>
        <ul>
    <li class="toctree-l3"><a class="reference internal" href="#windows">Windows</a>
    </li>
    <li class="toctree-l3"><a class="reference internal" href="#gnulinux">GNU/Linux</a>
    </li>
    <li class="toctree-l3"><a class="reference internal" href="#macos">MacOS</a>
    </li>
        </ul>
    </li>
    <li class="toctree-l2"><a class="reference internal" href="#_3">模组文件夹</a>
    </li>
    <li class="toctree-l2"><a class="reference internal" href="#_4">依赖</a>
        <ul>
    <li class="toctree-l3"><a class="reference internal" href="#modconf">Mod.conf</a>
    </li>
    <li class="toctree-l3"><a class="reference internal" href="#dependstxt">depends.txt</a>
    </li>
        </ul>
    </li>
    <li class="toctree-l2"><a class="reference internal" href="#_5">模组包</a>
    </li>
    <li class="toctree-l2"><a class="reference internal" href="#_6">例子</a>
        <ul>
    <li class="toctree-l3"><a class="reference internal" href="#_7">模组文件夹</a>
    </li>
    <li class="toctree-l3"><a class="reference internal" href="#dependstxt_1">depends.txt</a>
    </li>
    <li class="toctree-l3"><a class="reference internal" href="#initlua">init.lua</a>
    </li>
    <li class="toctree-l3"><a class="reference internal" href="#modconf_1">mod.conf</a>
    </li>
        </ul>
    </li>
    </ul>
                    </li>
                </ul>
                <ul>
                    <li class="toctree-l1"><a class="reference internal" href="4.Lua%E8%84%9A%E6%9C%AC.html">Lua脚本</a>
                    </li>
                </ul>
                <ul>
                    <li class="toctree-l1"><a class="reference internal" href="5.%E8%8A%82%E7%82%B9%E3%80%81%E7%89%A9%E5%93%81%E5%92%8C%E5%88%B6%E4%BD%9C.html">节点、物品与制作</a>
                    </li>
                </ul>
                <ul>
                    <li class="toctree-l1"><a class="reference internal" href="6.%E5%88%B6%E4%BD%9C%E6%9D%90%E8%B4%A8.html">制作贴图</a>
                    </li>
                </ul>
                <ul>
                    <li class="toctree-l1"><a class="reference internal" href="7.%E8%8A%82%E7%82%B9%E7%BB%98%E5%9B%BE%E7%B1%BB%E5%9E%8B.html">节点绘图类型</a>
                    </li>
                </ul>
                <ul>
                    <li class="toctree-l1"><a class="reference internal" href="8.%E7%89%A9%E5%93%81%E6%A0%8F%E5%92%8C%E8%83%8C%E5%8C%85.html">物品栏和背包</a>
                    </li>
                </ul>
                <ul>
                    <li class="toctree-l1"><a class="reference internal" href="9.%E5%9F%BA%E6%9C%AC%E5%9C%B0%E5%9B%BE%E6%93%8D%E4%BD%9C.html">基本地图操作</a>
                    </li>
                </ul>
      </div>
    </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

      
      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
        <a href="index.html">Minetest Modding Books(中文版)</a>
      </nav>

      
      <div class="wy-nav-content">
        <div class="rst-content">
          <div role="navigation" aria-label="breadcrumbs navigation">
  <ul class="wy-breadcrumbs">
    <li><a href="index.html">Docs</a> &raquo;</li>
    
      
    
    <li>入门</li>
    <li class="wy-breadcrumbs-aside">
      
    </li>
  </ul>
  
  <hr/>
</div>

          <div role="main">
            <div class="section">
              
                <h1 id="_1">入门</h1>
<p>理解mod文件夹的基本结构，对于模组开发来说是非常重要的基础。 </p>
<h2 id="mods">什么是游戏和Mods？</h2>
<p>Minetest的特点在于不用新建一个你自己的像素图形、算法以及各种网络代码就可以轻轻松松开发属于你自己的游戏。（没错，实际上就是一个像素风的游戏兼游戏引擎）<br/>
在Minetest里，一个完整的游戏背后，有许许多多的模块支撑着这个游戏。一个模块，也就是大家常说的模组（Mods），是一个由脚本和各种资源组成的集合（文件夹）。你可以只用一个模组来制作的游戏，但是这只是个例，这样会降低替换或调整独立部件的难度。（换来的代价就是可玩性大幅度降低）<br/>
包含在游戏中的模组和第三方模组用的都是同一API。<br/>
这本书将会包含Minetest API的主要部分，都适用于游戏开发者和模组开发者。<br/></p>
<h2 id="_2">模组存储在哪里了呢？</h2>
<p>每个MOD都有它自己的文件夹，这个文件里面包含了Lua代码，模型，和声音。Minetest检查了多个不同地点的mod。这些位置通常称为模组加载目录。<br/>
对于给定的world/save游戏，将检查三个模组位置。它们依次是：
1. 单个游戏专用模组文件夹。这些是专门用于单个游戏世界的模组。例如:<code>minetest/games/minetest_game/mods/</code>，<code>/usr/share/minetest/games/minetest/</code>
2. 全局模组文件夹，用于存放常的的模组。如果你初次安装MOD或者不知道如何装模组，请直接将模组拷贝到这里，例如：“minetest/mods”
3. 单个世界模组文件夹，用于存放单个世界特定的模组。例如：<code>minetest/worlds/world/worldmods/</code></p>
<p>Minetest将会按顺序检查以上位置。如果遇到一个重复的模组，则Minetest将会加载后面的模组。这就意味着，你可以通过在全局模组文件夹里放置一个同名的模组来覆盖单个游戏模组。<br/>
每个模组加载路径的实际位置取决于你的操作系统以及Minetest的安装方式。</p>
<h3 id="windows"><strong>Windows</strong></h3>
<ul>
<li>对于免安装的版本（例：直接解压.zip文件），只需要前往解压后的文件夹所在的位置，并查看games、mods和worlds文件夹。</li>
<li>对于使用傻瓜式安装的版本（例:通过setup.exe安装），请前往<code>C:\\Minetest</code></li>
</ul>
<p>或者是<code>C:\\Games\Minetest</code>文件夹。</p>
<h3 id="gnulinux"><strong>GNU/Linux</strong></h3>
<ul>
<li>对于多系统（通过安装包管理器安装，如apt、yum等）的版本，请查看<code>~/.minetest</code>
请注意：“～”代表着用户的主文件夹，然后以“.”为开头的文件夹是被隐藏起来的（也就意味着你要自己到地址框里面输入并跳转）。</li>
<li>对于可移植（也就是从Github上克隆下来的源代码）的版本，请查看编译文件夹。</li>
<li>对于Flatpak版本，请查看：<code>~/.var/app/net.minetest.Minetest/.minetest/mods/</code>。</li>
</ul>
<h3 id="macos"><strong>MacOS</strong></h3>
<ul>
<li>请查看<code>~/Library/Application Support/minetest/</code> 。</li>
</ul>
<p>请注意：“～”代表着用户的主文件夹，例如：<code>/Users/USERNAME/</code>。</p>
<h2 id="_3">模组文件夹</h2>
<p><img alt="模组位置" src="img/mod_location.png" /></p>
<p>一个模组名称代表着一个模组。每个模组应该有一个特别的名字。模组的名字应该由字母，数字和下划线组成。一个好的名字可以让人家知道该模组的功能，包含模组组件的目录必须与mod名称相同。在制作一个模组之前，请先到<a href="https://content.minetest.net/">content.minetest.net</a>查看是否有已经有同名的模组（通俗一点就是模组撞车）。</p>
<blockquote>
<p>mymod<br/>
├── init.lua (必须要有) - 加载游戏时运行<br/>
├── mod.conf (推荐) - 包含介绍和依赖<br/>
├── textures (可选)<br/>
│   └── ... 贴图或者文件<br/>
├── sounds (可选)<br/>
│   └── ... 声音<br/>
└── ... 其他各种文件或者文件夹<br/></p>
</blockquote>
<p>只有init.lua 文件是在模组中必须要有的文件，以便在游戏中运行；然而，我们建议你新建一个mod.conf文件。至于其他文件的话，取决于模组里要实现的功能。<br/></p>
<h2 id="_4">依赖</h2>
<p>如果该模组有依赖模组，该模组会在加载前检查是否已经安装依赖模组。一个模组或许会需要另一个模组的代码，物品或者是其他可用的资源。<br/>
这里有两种依赖：一种是强制性依赖（hard），还有一种就是可选性依赖（optional）。两种依赖都会在加载该模组之前先检查这些依赖。如果有一个强制性依赖没有安装，那么将会导致模组加载失败；如果有可选性模组没有安装，那么，你体验到的，只是精简版的模组。<br/>
如果你希望你的模组支持其他模组，那么可选性依赖对于你来说是非常有用的；当然你也可以在现有模组的基础上，进一步扩展。<br/>
依赖的模组列表应该放在在mod.conf文件中。<br/></p>
<h3 id="modconf"><strong>Mod.conf</strong></h3>
<p>这是一个有关于该模组的配置文件，它包含了名字、介绍以及其他信息。举个例子（尽量全英文）：<br/></p>
<blockquote>
<p>name = mymod<br/>
description = Adds foo, bar, and bo.<br/>
depends = modone, modtwo<br/>
optional_depends = modthree<br/></p>
</blockquote>
<h3 id="dependstxt"><strong>depends.txt</strong></h3>
<p>如果你的MOD要兼容0.4.X版本的Minetest，不仅要将依赖模组列表写在mod.conf里面，还要写在depends.txt里面，举个例子：</p>
<blockquote>
<p>modone<br/>
modtwo<br/>
modthree?<br/></p>
</blockquote>
<p>每个模组名称占一行，如果这个模组是可选性模组，那么请在模组名称后面加上“？”。然而，在没有安装这个模组的情况下，这个模组依旧会加载。相反，如果没有安装相应的强制性模组，就会导致该模组无法运行。</p>
<h2 id="_5">模组包</h2>
<p>模组可以分为模组包（mod packs），允许多个mod打包并一起移动。如果你想为一个玩家提供多个mod，但又不想让它们单独下载，那么模组包对于你来说非常有用。</p>
<blockquote>
<p>modpack1<br/>
├── modpack.lua (需要) - 声明这是一个模组<br/>
pack<br/>
├── mod1<br/>
│   └── ... 模组文件<br/>
└── mymod (optional)<br/>
    └── ... 模组文件<br/></p>
</blockquote>
<p>请注意模组包不是游戏。游戏有自己的组织结构，这将在游戏章节中解释。</p>
<h2 id="_6">例子</h2>
<p>以下是例子的集合</p>
<h3 id="_7"><strong>模组文件夹</strong></h3>
<blockquote>
<p>mymod<br/>
├── textures<br/>
│   └── mymod_node.png files<br/>
├── depends.txt<br/>
├── init.lua<br/>
└── mod.conf<br/></p>
</blockquote>
<h3 id="dependstxt_1"><strong>depends.txt</strong></h3>
<blockquote>
<p>default</p>
</blockquote>
<h3 id="initlua"><strong>init.lua</strong></h3>
<p>print("This file will be run at load time!")<br/></p>
<pre><code class="language-lua">minetest.register_node(&quot;mymod:node&quot;, {
  description = &quot;This is a node&quot;,
  tiles = {&quot;mymod_node.png&quot;},
  groups = {cracky = 1}
})
</code></pre>
<h3 id="modconf_1"><strong>mod.conf</strong></h3>
<pre><code class="language-lua">name = mymod
descriptions = Adds a node
depends = default
</code></pre>
<p>这个mod的名字是“mymod”。它有三个文本文件：init.lua、mod.conf和depends.txt。<br/>
脚本打印一条消息，然后注册一个节点——这将在下一章中解释。<br/>
有一个单一的依赖项，<a href="https://content.minetest.net/metapackages/default/">默认模组</a>，通常在Minetest游戏中找到。<br/>
在“贴图”（textures）/中还有一个用于方块的纹理。<br/></p>
              
            </div>
          </div>
          <footer>
  
    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
      
        <a href="4.Lua%E8%84%9A%E6%9C%AC.html" class="btn btn-neutral float-right" title="Lua脚本">Next <span class="icon icon-circle-arrow-right"></span></a>
      
      
        <a href="2.%E5%89%8D%E8%A8%80.html" class="btn btn-neutral" title="前言"><span class="icon icon-circle-arrow-left"></span> Previous</a>
      
    </div>
  

  <hr/>

  <div role="contentinfo">
    <!-- Copyright etc -->
    
  </div>

  Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
      
        </div>
      </div>

    </section>

  </div>

  <div class="rst-versions" role="note" aria-label="versions">
  <span class="rst-current-version" data-toggle="rst-current-version">
    
    
      <span><a href="2.%E5%89%8D%E8%A8%80.html" style="color: #fcfcfc">&laquo; Previous</a></span>
    
    
      <span><a href="4.Lua%E8%84%9A%E6%9C%AC.html" style="color: #fcfcfc">Next &raquo;</a></span>
    
  </span>
</div>
    <script>var base_url = '.';</script>
    <script src="js/theme_extra.js" defer></script>
    <script src="js/theme.js" defer></script>
      <script src="search/main.js" defer></script>
    <script defer>
        window.onload = function () {
            SphinxRtdTheme.Navigation.enable(true);
        };
    </script>

</body>
</html>
